package la.iok.hzsvn.lewin.movie.cloud.service;

import la.iok.hzsvn.lewin.movie.cloud.entity.QRCode;
import la.iok.hzsvn.lewin.movie.cloud.model.PlayRecordQrCodeInfo;
import la.iok.hzsvn.lewin.movie.cloud.model.QRCodeInfo;
import la.iok.hzsvn.lewin.movie.core.Token;
import la.iok.hzsvn.lewin.movie.core.model.QR;
import la.iok.hzsvn.lewin.movie.core.model.QRCodeBaseInfo;
import la.iok.hzsvn.lewin.mybatis.service.BaseService;
import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.annotations.Nullable;

public interface QRCodeService extends BaseService<QRCode,Long> {
    /**
     * 生成店铺二维码并返回
     * @param token 操作用户
     * @param id 店铺id
     * @return 二维码信息
     */
    @NotNull
    QRCodeInfo shopQRCode(@NotNull Token token, @NotNull Long id);

    /**
     * 生成房间的二维码并返回
     * @param token 操作用户
     * @param id 房间id
     * @return 二维码信息
     */
    @NotNull
    QRCodeInfo roomQRCode(@NotNull Token token, @NotNull Long id);

    /**
     * 从redis中查询二维码信息
     * @param uuid 二维码标识
     * @return 二维码信息
     */
    @NotNull
    QR qrCode(@NotNull String uuid);

    /**
     * 保存二维码到数据库
     * @param orgUnitId 组织id
     * @param qrCode 二维码信息
     */
    void save(@NotNull Long orgUnitId,@NotNull QRCodeInfo qrCode);

    /**
     * 保存二维码
     * @param orgUnitId 组织id
     * @param roomId 房间id
     * @param qrCode 二维码信息
     */
    void save(@NotNull Long orgUnitId,@Nullable Long roomId,@NotNull QRCodeBaseInfo qrCode);

    /**
     * 查询二维码
     * @param uuid 二维码标识
     * @return 二维码
     */
    @Nullable
    QRCode select(@Nullable String uuid);

    /**
     * 删除二维码
     * @param uuid 二维码标识
     */
    void delete(@Nullable String uuid);

    /**
     * 开本记录二维码
     * @param token 操作用户,必须是开本的DM
     * @param id 开本记录id
     * @return 二维码需要的信息
     */
    PlayRecordQrCodeInfo playRecordQRCode(@NotNull Token token, @Nullable Long id);
}
